/*
 *
 *    Copyright (c) 2022 Project CHIP Authors
 *
 *    Licensed under the Apache License, Version 2.0 (the "License");
 *    you may not use this file except in compliance with the License.
 *    You may obtain a copy of the License at
 *
 *        http://www.apache.org/licenses/LICENSE-2.0
 *
 *    Unless required by applicable law or agreed to in writing, software
 *    distributed under the License is distributed on an "AS IS" BASIS,
 *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *    See the License for the specific language governing permissions and
 *    limitations under the License.
 */

// THIS FILE IS GENERATED BY ZAP
// This file is generated from clusters-Events.ipp.zapt

#include <clusters/Thermostat/Events.h>

#include <app/data-model/Decode.h>
#include <app/data-model/Encode.h>
#include <app/data-model/StructDecodeIterator.h>
#include <app/data-model/WrappedStructEncoder.h>

namespace chip
{
namespace app
{
	namespace Clusters
	{
		namespace Thermostat
		{
			namespace Events
			{
				namespace SystemModeChange
				{
					CHIP_ERROR Type::Encode(TLV::TLVWriter &aWriter, TLV::Tag aTag) const
					{
						TLV::TLVType outer;
						ReturnErrorOnFailure(
							aWriter.StartContainer(aTag, TLV::kTLVType_Structure, outer));
						ReturnErrorOnFailure(DataModel::Encode(
							aWriter, TLV::ContextTag(Fields::kPreviousSystemMode),
							previousSystemMode));
						ReturnErrorOnFailure(DataModel::Encode(
							aWriter, TLV::ContextTag(Fields::kCurrentSystemMode),
							currentSystemMode));
						return aWriter.EndContainer(outer);
					}

					CHIP_ERROR DecodableType::Decode(TLV::TLVReader &reader)
					{
						detail::StructDecodeIterator __iterator(reader);
						while (true) {
							uint8_t __context_tag = 0;
							CHIP_ERROR err = __iterator.Next(__context_tag);
							VerifyOrReturnError(err != CHIP_ERROR_END_OF_TLV,
									    CHIP_NO_ERROR);
							ReturnErrorOnFailure(err);

							if (__context_tag ==
							    to_underlying(Fields::kPreviousSystemMode)) {
								err = DataModel::Decode(reader, previousSystemMode);
							} else if (__context_tag ==
								   to_underlying(Fields::kCurrentSystemMode)) {
								err = DataModel::Decode(reader, currentSystemMode);
							} else {
							}

							ReturnErrorOnFailure(err);
						}
					}
				} // namespace SystemModeChange.
				namespace LocalTemperatureChange
				{
					CHIP_ERROR Type::Encode(TLV::TLVWriter &aWriter, TLV::Tag aTag) const
					{
						TLV::TLVType outer;
						ReturnErrorOnFailure(
							aWriter.StartContainer(aTag, TLV::kTLVType_Structure, outer));
						ReturnErrorOnFailure(DataModel::Encode(
							aWriter, TLV::ContextTag(Fields::kCurrentLocalTemperature),
							currentLocalTemperature));
						return aWriter.EndContainer(outer);
					}

					CHIP_ERROR DecodableType::Decode(TLV::TLVReader &reader)
					{
						detail::StructDecodeIterator __iterator(reader);
						while (true) {
							uint8_t __context_tag = 0;
							CHIP_ERROR err = __iterator.Next(__context_tag);
							VerifyOrReturnError(err != CHIP_ERROR_END_OF_TLV,
									    CHIP_NO_ERROR);
							ReturnErrorOnFailure(err);

							if (__context_tag ==
							    to_underlying(Fields::kCurrentLocalTemperature)) {
								err = DataModel::Decode(reader,
											currentLocalTemperature);
							} else {
							}

							ReturnErrorOnFailure(err);
						}
					}
				} // namespace LocalTemperatureChange.
				namespace OccupancyChange
				{
					CHIP_ERROR Type::Encode(TLV::TLVWriter &aWriter, TLV::Tag aTag) const
					{
						TLV::TLVType outer;
						ReturnErrorOnFailure(
							aWriter.StartContainer(aTag, TLV::kTLVType_Structure, outer));
						ReturnErrorOnFailure(DataModel::Encode(
							aWriter, TLV::ContextTag(Fields::kPreviousOccupancy),
							previousOccupancy));
						ReturnErrorOnFailure(DataModel::Encode(
							aWriter, TLV::ContextTag(Fields::kCurrentOccupancy),
							currentOccupancy));
						return aWriter.EndContainer(outer);
					}

					CHIP_ERROR DecodableType::Decode(TLV::TLVReader &reader)
					{
						detail::StructDecodeIterator __iterator(reader);
						while (true) {
							uint8_t __context_tag = 0;
							CHIP_ERROR err = __iterator.Next(__context_tag);
							VerifyOrReturnError(err != CHIP_ERROR_END_OF_TLV,
									    CHIP_NO_ERROR);
							ReturnErrorOnFailure(err);

							if (__context_tag ==
							    to_underlying(Fields::kPreviousOccupancy)) {
								err = DataModel::Decode(reader, previousOccupancy);
							} else if (__context_tag ==
								   to_underlying(Fields::kCurrentOccupancy)) {
								err = DataModel::Decode(reader, currentOccupancy);
							} else {
							}

							ReturnErrorOnFailure(err);
						}
					}
				} // namespace OccupancyChange.
				namespace SetpointChange
				{
					CHIP_ERROR Type::Encode(TLV::TLVWriter &aWriter, TLV::Tag aTag) const
					{
						TLV::TLVType outer;
						ReturnErrorOnFailure(
							aWriter.StartContainer(aTag, TLV::kTLVType_Structure, outer));
						ReturnErrorOnFailure(DataModel::Encode(
							aWriter, TLV::ContextTag(Fields::kSystemMode), systemMode));
						ReturnErrorOnFailure(DataModel::Encode(
							aWriter, TLV::ContextTag(Fields::kOccupancy), occupancy));
						ReturnErrorOnFailure(DataModel::Encode(
							aWriter, TLV::ContextTag(Fields::kPreviousSetpoint),
							previousSetpoint));
						ReturnErrorOnFailure(DataModel::Encode(
							aWriter, TLV::ContextTag(Fields::kCurrentSetpoint),
							currentSetpoint));
						return aWriter.EndContainer(outer);
					}

					CHIP_ERROR DecodableType::Decode(TLV::TLVReader &reader)
					{
						detail::StructDecodeIterator __iterator(reader);
						while (true) {
							uint8_t __context_tag = 0;
							CHIP_ERROR err = __iterator.Next(__context_tag);
							VerifyOrReturnError(err != CHIP_ERROR_END_OF_TLV,
									    CHIP_NO_ERROR);
							ReturnErrorOnFailure(err);

							if (__context_tag == to_underlying(Fields::kSystemMode)) {
								err = DataModel::Decode(reader, systemMode);
							} else if (__context_tag == to_underlying(Fields::kOccupancy)) {
								err = DataModel::Decode(reader, occupancy);
							} else if (__context_tag ==
								   to_underlying(Fields::kPreviousSetpoint)) {
								err = DataModel::Decode(reader, previousSetpoint);
							} else if (__context_tag ==
								   to_underlying(Fields::kCurrentSetpoint)) {
								err = DataModel::Decode(reader, currentSetpoint);
							} else {
							}

							ReturnErrorOnFailure(err);
						}
					}
				} // namespace SetpointChange.
				namespace RunningStateChange
				{
					CHIP_ERROR Type::Encode(TLV::TLVWriter &aWriter, TLV::Tag aTag) const
					{
						TLV::TLVType outer;
						ReturnErrorOnFailure(
							aWriter.StartContainer(aTag, TLV::kTLVType_Structure, outer));
						ReturnErrorOnFailure(DataModel::Encode(
							aWriter, TLV::ContextTag(Fields::kPreviousRunningState),
							previousRunningState));
						ReturnErrorOnFailure(DataModel::Encode(
							aWriter, TLV::ContextTag(Fields::kCurrentRunningState),
							currentRunningState));
						return aWriter.EndContainer(outer);
					}

					CHIP_ERROR DecodableType::Decode(TLV::TLVReader &reader)
					{
						detail::StructDecodeIterator __iterator(reader);
						while (true) {
							uint8_t __context_tag = 0;
							CHIP_ERROR err = __iterator.Next(__context_tag);
							VerifyOrReturnError(err != CHIP_ERROR_END_OF_TLV,
									    CHIP_NO_ERROR);
							ReturnErrorOnFailure(err);

							if (__context_tag ==
							    to_underlying(Fields::kPreviousRunningState)) {
								err = DataModel::Decode(reader, previousRunningState);
							} else if (__context_tag ==
								   to_underlying(Fields::kCurrentRunningState)) {
								err = DataModel::Decode(reader, currentRunningState);
							} else {
							}

							ReturnErrorOnFailure(err);
						}
					}
				} // namespace RunningStateChange.
				namespace RunningModeChange
				{
					CHIP_ERROR Type::Encode(TLV::TLVWriter &aWriter, TLV::Tag aTag) const
					{
						TLV::TLVType outer;
						ReturnErrorOnFailure(
							aWriter.StartContainer(aTag, TLV::kTLVType_Structure, outer));
						ReturnErrorOnFailure(DataModel::Encode(
							aWriter, TLV::ContextTag(Fields::kPreviousRunningMode),
							previousRunningMode));
						ReturnErrorOnFailure(DataModel::Encode(
							aWriter, TLV::ContextTag(Fields::kCurrentRunningMode),
							currentRunningMode));
						return aWriter.EndContainer(outer);
					}

					CHIP_ERROR DecodableType::Decode(TLV::TLVReader &reader)
					{
						detail::StructDecodeIterator __iterator(reader);
						while (true) {
							uint8_t __context_tag = 0;
							CHIP_ERROR err = __iterator.Next(__context_tag);
							VerifyOrReturnError(err != CHIP_ERROR_END_OF_TLV,
									    CHIP_NO_ERROR);
							ReturnErrorOnFailure(err);

							if (__context_tag ==
							    to_underlying(Fields::kPreviousRunningMode)) {
								err = DataModel::Decode(reader, previousRunningMode);
							} else if (__context_tag ==
								   to_underlying(Fields::kCurrentRunningMode)) {
								err = DataModel::Decode(reader, currentRunningMode);
							} else {
							}

							ReturnErrorOnFailure(err);
						}
					}
				} // namespace RunningModeChange.
				namespace ActiveScheduleChange
				{
					CHIP_ERROR Type::Encode(TLV::TLVWriter &aWriter, TLV::Tag aTag) const
					{
						TLV::TLVType outer;
						ReturnErrorOnFailure(
							aWriter.StartContainer(aTag, TLV::kTLVType_Structure, outer));
						ReturnErrorOnFailure(DataModel::Encode(
							aWriter, TLV::ContextTag(Fields::kPreviousScheduleHandle),
							previousScheduleHandle));
						ReturnErrorOnFailure(DataModel::Encode(
							aWriter, TLV::ContextTag(Fields::kCurrentScheduleHandle),
							currentScheduleHandle));
						return aWriter.EndContainer(outer);
					}

					CHIP_ERROR DecodableType::Decode(TLV::TLVReader &reader)
					{
						detail::StructDecodeIterator __iterator(reader);
						while (true) {
							uint8_t __context_tag = 0;
							CHIP_ERROR err = __iterator.Next(__context_tag);
							VerifyOrReturnError(err != CHIP_ERROR_END_OF_TLV,
									    CHIP_NO_ERROR);
							ReturnErrorOnFailure(err);

							if (__context_tag ==
							    to_underlying(Fields::kPreviousScheduleHandle)) {
								err = DataModel::Decode(reader, previousScheduleHandle);
							} else if (__context_tag ==
								   to_underlying(Fields::kCurrentScheduleHandle)) {
								err = DataModel::Decode(reader, currentScheduleHandle);
							} else {
							}

							ReturnErrorOnFailure(err);
						}
					}
				} // namespace ActiveScheduleChange.
				namespace ActivePresetChange
				{
					CHIP_ERROR Type::Encode(TLV::TLVWriter &aWriter, TLV::Tag aTag) const
					{
						TLV::TLVType outer;
						ReturnErrorOnFailure(
							aWriter.StartContainer(aTag, TLV::kTLVType_Structure, outer));
						ReturnErrorOnFailure(DataModel::Encode(
							aWriter, TLV::ContextTag(Fields::kPreviousPresetHandle),
							previousPresetHandle));
						ReturnErrorOnFailure(DataModel::Encode(
							aWriter, TLV::ContextTag(Fields::kCurrentPresetHandle),
							currentPresetHandle));
						return aWriter.EndContainer(outer);
					}

					CHIP_ERROR DecodableType::Decode(TLV::TLVReader &reader)
					{
						detail::StructDecodeIterator __iterator(reader);
						while (true) {
							uint8_t __context_tag = 0;
							CHIP_ERROR err = __iterator.Next(__context_tag);
							VerifyOrReturnError(err != CHIP_ERROR_END_OF_TLV,
									    CHIP_NO_ERROR);
							ReturnErrorOnFailure(err);

							if (__context_tag ==
							    to_underlying(Fields::kPreviousPresetHandle)) {
								err = DataModel::Decode(reader, previousPresetHandle);
							} else if (__context_tag ==
								   to_underlying(Fields::kCurrentPresetHandle)) {
								err = DataModel::Decode(reader, currentPresetHandle);
							} else {
							}

							ReturnErrorOnFailure(err);
						}
					}
				} // namespace ActivePresetChange.
			} // namespace Events
		} // namespace Thermostat
	} // namespace Clusters
} // namespace app
} // namespace chip
